package com.cmsky.open.core.convertor;

import java.io.IOException;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.List;

import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.util.FileCopyUtils;

public class UTF8StringHttpMessageConverter extends StringHttpMessageConverter {

	 private static final MediaType utf8 = new MediaType("text", "plain",
	 Charset.forName("UTF-8"));
	 private boolean writeAcceptCharset = true;

	 @Override
	 protected MediaType getDefaultContentType(String dumy) {
	 return utf8;
	 }

	 protected List<Charset> getAcceptedCharsets() {
	 return Arrays.asList(utf8.getCharSet());
	 }

	 protected void writeInternal(String s, HttpOutputMessage outputMessage)
	 throws IOException {
	 if (this.writeAcceptCharset) {
	 outputMessage.getHeaders().setAcceptCharset(getAcceptedCharsets());
	 }
	 Charset charset = utf8.getCharSet();
	 FileCopyUtils.copy(s, new OutputStreamWriter(outputMessage.getBody(),
	 charset));
	 }

	 public boolean isWriteAcceptCharset() {
	 return writeAcceptCharset;
	 }

	 public void setWriteAcceptCharset(boolean writeAcceptCharset) {
	 this.writeAcceptCharset = writeAcceptCharset;
	 }

	}
